 /*******************************************************************************
  * Copyright (c) 2003, 2006 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
 package org.eclipse.ui.commands;

 import java.util.Set ;

 import org.eclipse.ui.internal.util.Util;

 /**
  * An instance of this class describes changes to an instance of
  * <code>ICommandManager</code>.
  * <p>
  * This class is not intended to be extended by clients.
  * </p>
  *
  * @since 3.0
  * @see ICommandManagerListener#commandManagerChanged(CommandManagerEvent)
  * @see org.eclipse.core.commands.CommandManagerEvent
  * @deprecated Please use the "org.eclipse.core.commands" plug-in instead.
  */
 public final class CommandManagerEvent {

     /**
      * Whether the set of active contexts has changed.
      */
     private final boolean activeContextIdsChanged;

     /**
      * Whether the active key configuration has changed.
      */
     private final boolean activeKeyConfigurationIdChanged;

     /**
      * Whether the locale has changed.
      */
     private final boolean activeLocaleChanged;

     /**
      * Whether the platform has changed.
      */
     private final boolean activePlatformChanged;

     /**
      * Whether the command manager has changed.
      */
     private final ICommandManager commandManager;

     /**
      * Whether the list of defined categories has changed.
      */
     private final boolean definedCategoryIdsChanged;

     /**
      * Whether the list of defined commands has changed.
      */
     private final boolean definedCommandIdsChanged;

     /**
      * Whether the list of defined key configurations has changed.
      */
     private final boolean definedKeyConfigurationIdsChanged;

     /**
      * The set of the defined categories before the change occurred. This is a
      * set of strings (category identifiers).
      */
     private final Set previouslyDefinedCategoryIds;

     /**
      * The set of the defined commands before the change occurred. This is a
      * set of strings (command identifiers).
      */
     private final Set previouslyDefinedCommandIds;

     /**
      * The set of the defined key configurations before the change occurred.
      * This is a set of strings (key configuration identifiers).
      */
     private final Set previouslyDefinedKeyConfigurationIds;

     /**
      * Creates a new instance of this class.
      *
      * @param commandManager
      * the instance of the interface that changed.
      * @param activeContextIdsChanged
      * true, iff the activeContextIdsChanged property changed.
      * @param activeKeyConfigurationIdChanged
      * true, iff the activeKeyConfigurationIdChanged property
      * changed.
      * @param activeLocaleChanged
      * true, iff the activeLocaleChanged property changed.
      * @param activePlatformChanged
      * true, iff the activePlatformChanged property changed.
      * @param definedCategoryIdsChanged
      * true, iff the definedCategoryIdsChanged property changed.
      * @param definedCommandIdsChanged
      * true, iff the definedCommandIdsChanged property changed.
      * @param definedKeyConfigurationIdsChanged
      * true, iff the definedKeyConfigurationIdsChanged property
      * changed.
      * @param previouslyDefinedCategoryIds
      * the set of identifiers to previously defined categories. This
      * set may be empty. If this set is not empty, it must only
      * contain instances of <code>String</code>. This set must be
      * <code>null</code> if definedCategoryIdsChanged is
      * <code>false</code> and must not be null if
      * definedCategoryIdsChanged is <code>true</code>.
      * @param previouslyDefinedCommandIds
      * the set of identifiers to previously defined commands. This
      * set may be empty. If this set is not empty, it must only
      * contain instances of <code>String</code>. This set must be
      * <code>null</code> if definedCommandIdsChanged is
      * <code>false</code> and must not be null if
      * definedContextIdsChanged is <code>true</code>.
      * @param previouslyDefinedKeyConfigurationIds
      * the set of identifiers to previously defined key
      * configurations. This set may be empty. If this set is not
      * empty, it must only contain instances of <code>String</code>.
      * This set must be <code>null</code> if
      * definedKeyConfigurationIdsChanged is <code>false</code> and
      * must not be null if definedKeyConfigurationIdsChanged is
      * <code>true</code>.
      */
     public CommandManagerEvent(ICommandManager commandManager,
             boolean activeContextIdsChanged,
             boolean activeKeyConfigurationIdChanged,
             boolean activeLocaleChanged, boolean activePlatformChanged,
             boolean definedCategoryIdsChanged,
             boolean definedCommandIdsChanged,
             boolean definedKeyConfigurationIdsChanged,
             Set previouslyDefinedCategoryIds, Set previouslyDefinedCommandIds,
             Set previouslyDefinedKeyConfigurationIds) {
         if (commandManager == null) {
             throw new NullPointerException ();
         }

         if (!definedCategoryIdsChanged && previouslyDefinedCategoryIds != null) {
             throw new IllegalArgumentException ();
         }

         if (!definedCommandIdsChanged && previouslyDefinedCommandIds != null) {
             throw new IllegalArgumentException ();
         }

         if (!definedKeyConfigurationIdsChanged
                 && previouslyDefinedKeyConfigurationIds != null) {
             throw new IllegalArgumentException ();
         }

         if (definedCategoryIdsChanged) {
             this.previouslyDefinedCategoryIds = Util.safeCopy(
                     previouslyDefinedCategoryIds, String .class);
         } else {
             this.previouslyDefinedCategoryIds = null;
         }

         if (definedCommandIdsChanged) {
             this.previouslyDefinedCommandIds = Util.safeCopy(
                     previouslyDefinedCommandIds, String .class);
         } else {
             this.previouslyDefinedCommandIds = null;
         }

         if (definedKeyConfigurationIdsChanged) {
             this.previouslyDefinedKeyConfigurationIds = Util.safeCopy(
                     previouslyDefinedKeyConfigurationIds, String .class);
         } else {
             this.previouslyDefinedKeyConfigurationIds = null;
         }

         this.commandManager = commandManager;
         this.activeContextIdsChanged = activeContextIdsChanged;
         this.activeKeyConfigurationIdChanged = activeKeyConfigurationIdChanged;
         this.activeLocaleChanged = activeLocaleChanged;
         this.activePlatformChanged = activePlatformChanged;
         this.definedCategoryIdsChanged = definedCategoryIdsChanged;
         this.definedCommandIdsChanged = definedCommandIdsChanged;
         this.definedKeyConfigurationIdsChanged = definedKeyConfigurationIdsChanged;
     }

     /**
      * Returns the instance of the interface that changed.
      *
      * @return the instance of the interface that changed. Guaranteed not to be
      * <code>null</code>.
      */
     public ICommandManager getCommandManager() {
         return commandManager;
     }

     /**
      * Returns the set of identifiers to previously defined categories.
      *
      * @return the set of identifiers to previously defined categories. This set
      * may be empty. If this set is not empty, it is guaranteed to only
      * contain instances of <code>String</code>. This set is
      * guaranteed to be <code>null</code> if
      * haveDefinedCategoryIdsChanged() is <code>false</code> and is
      * guaranteed to not be null if haveDefinedCategoryIdsChanged() is
      * <code>true</code>.
      */
     public Set getPreviouslyDefinedCategoryIds() {
         return previouslyDefinedCategoryIds;
     }

     /**
      * Returns the set of identifiers to previously defined commands.
      *
      * @return the set of identifiers to previously defined commands. This set
      * may be empty. If this set is not empty, it is guaranteed to only
      * contain instances of <code>String</code>. This set is
      * guaranteed to be <code>null</code> if
      * haveDefinedCommandIdsChanged() is <code>false</code> and is
      * guaranteed to not be null if haveDefinedCommandIdsChanged() is
      * <code>true</code>.
      */
     public Set getPreviouslyDefinedCommandIds() {
         return previouslyDefinedCommandIds;
     }

     /**
      * Returns the set of identifiers to previously defined key conigurations.
      *
      * @return the set of identifiers to previously defined key configurations.
      * This set may be empty. If this set is not empty, it is guaranteed
      * to only contain instances of <code>String</code>. This set is
      * guaranteed to be <code>null</code> if
      * haveDefinedKeyConfigurationIdsChanged() is <code>false</code>
      * and is guaranteed to not be null if
      * haveDefinedKeyConfigurationIdsChanged() is <code>true</code>.
      */
     public Set getPreviouslyDefinedKeyConfigurationIds() {
         return previouslyDefinedKeyConfigurationIds;
     }

     /**
      * Returns whether or not the activeKeyConfigurationId property changed.
      *
      * @return true, iff the activeKeyConfigurationId property changed.
      */
     public boolean hasActiveKeyConfigurationIdChanged() {
         return activeKeyConfigurationIdChanged;
     }

     /**
      * Returns whether or not the activeLocale property changed.
      *
      * @return true, iff the activeLocale property changed.
      */
     public boolean hasActiveLocaleChanged() {
         return activeLocaleChanged;
     }

     /**
      * Returns whether or not the activePlatform property changed.
      *
      * @return true, iff the activePlatform property changed.
      */
     public boolean hasActivePlatformChanged() {
         return activePlatformChanged;
     }

     /**
      * Returns whether or not the activeContextIds property changed.
      *
      * @return true, iff the activeContextIds property changed.
      */
     public boolean haveActiveContextIdsChanged() {
         return activeContextIdsChanged;
     }

     /**
      * Returns whether or not the definedCategoryIds property changed.
      *
      * @return true, iff the definedCategoryIds property changed.
      */
     public boolean haveDefinedCategoryIdsChanged() {
         return definedCategoryIdsChanged;
     }

     /**
      * Returns whether or not the definedCommandIds property changed.
      *
      * @return true, iff the definedCommandIds property changed.
      */
     public boolean haveDefinedCommandIdsChanged() {
         return definedCommandIdsChanged;
     }

     /**
      * Returns whether or not the definedKeyConfigurationIds property changed.
      *
      * @return true, iff the definedKeyConfigurationIds property changed.
      */
     public boolean haveDefinedKeyConfigurationIdsChanged() {
         return definedKeyConfigurationIdsChanged;
     }
 }

